<?php
namespace WeChatPay\Request;

use function WeChatPay\FilterParam;
use function WeChatPay\FuncReturn;

/**
 * 查询订单API 商户订单号查询
 * 商户可以通过查询订单接口主动查询订单状态，完成下一步的业务逻辑。查询订单状态可通过微信支付订单号或商户订单号两种方式查询
 * Class WeChatPayTradeOutTradeNoQueryRequest
 * @package WeChatPay\Request
 */
class WeChatPayTradeOutTradeNoQueryRequest extends AbstractBaseRequest
{
    protected $apiUri = "v3/pay/transactions/out-trade-no/%s";

    /**
     * 请求方式
     * @var string
     */
    public $requestType = 'get';

    /**
     * 必填参数列表
     * @var array
     */
    protected $mustAddParams = ['out_trade_no'];

    /**
     * 属性映射方法名称
     * @var array
     */
    protected $propertyMapSetFunction = [
        'out_trade_no'    =>  'setOutTradeNo'
    ];

    /**
     * 商户订单号:商户系统内部订单号，只能是数字、大小写字母_-*且在同一个商户号下唯一.特殊规则：最小字符长度为6
     * @var string
     */
    protected $out_trade_no = "";

    /**
     * 获取接口请求地址
     * @return string
     */
    public function getApiUri()
    {
        return sprintf($this->apiUri, $this->out_trade_no);
    }

    /**
     * 获取配置基础参数列表
     * @return array
     */
    public function getBaseParams(): array {
        return ['mchid'];
    }

    /**
     * 获取商户订单号
     * @return string
     */
    public function getOutTradeNo(): string
    {
        return $this->transaction_id;
    }

    /**
     * 设置商户订单号
     * @param string $out_trade_no
     */
    public function setOutTradeNo(string $out_trade_no): void
    {
        $this->addPathParams('out_trade_no');
        $this->out_trade_no = $out_trade_no;
    }
}